﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Linq;
using System.IO;
using DO = DataObjects;
using DM = DataMapping;

namespace DataAccess
{
    public class CompraDB
    {
        #region Metodos Publicos

        public static DO.Compra GetItem(int id)
        {
            using (DM.DataMappingDataContext dc = new DM.DataMappingDataContext())
            {
                DM.Compra compra = (from c in dc.Compras
                                    where c.IdCompra == id
                                    select c).FirstOrDefault();

                return FillRecord(compra);
            }
        }

        public static List<DO.Compra> GetList()
        {
            using (DM.DataMappingDataContext dc = new DM.DataMappingDataContext())
            {
                List<DM.Compra> compraList = (from c in dc.Compras
                                              select c).ToList();

                List<DO.Compra> compraListReturn = new List<DO.Compra>();
                foreach (DM.Compra c in compraList)
                    compraListReturn.Add(FillRecord(c));

                return compraListReturn;
            }
        }

        public static int Save(DO.Compra compra)
        {
            using (DM.DataMappingDataContext dc = new DM.DataMappingDataContext())
            {
                DM.Compra compraDB = (from c in dc.Compras
                                      where c.IdCompra == compra.Id
                                      select c).FirstOrDefault();

                if (compraDB == null)
                {
                    compraDB = new DM.Compra();

                    compraDB.IdCorretor = compra.IdCorretor;
                    compraDB.IdFornecedor = compra.IdFornecedor;
                    compraDB.ValorComissaoCorretor = compra.ValorComissao;
                    compraDB.FormaPagtoComissaoCorretor = compra.FormaPagtoComissao;
                    compraDB.DtCompra = compra.DtCompra;
                    compraDB.VlrCompra = compra.VlrCompra;
                    compraDB.VlrEspecie = compra.VlrEspecie;
                    compraDB.VlrCartao = compra.VlrCartao;
                    compraDB.QtdeVezesCartao = compra.QtdeVezesCartao;
                    compraDB.DtPrimParcelaCartao = compra.DtPrimParcelaCartao;
                    compraDB.VlrCheque = compra.VlrCheque;
                    compraDB.VlrTransfBancaria1 = compra.VlrTransfBancaria1;
                    compraDB.VlrTransfBancaria2 = compra.VlrTransfBancaria2;
                    compraDB.SaldoPagar = compra.SaldoPagar;
                    compraDB.SaldoDescontar = compra.SaldoDescontar;
                    compraDB.VlrMultas = compra.VlrMultas;
                    compraDB.ClassificacaoMultas = compra.ClassificacaoMultas;
                    compraDB.Gravame = compra.Gravame;
                    compraDB.BancoGravame = compra.BancoGravame;
                    compraDB.ClassificacaoGravame = compra.ClassificacaoGravame;
                    compraDB.SaldoQuitacao = compra.SaldoQuitacao;
                    compraDB.DtSaldo = compra.DtSaldo;
                    compraDB.LicenciamentoMes = compra.LicenciamentoMes;
                    compraDB.ClassificacaoLicenciamento = compra.ClassificacaoLicenciamento;
                    compraDB.VlrLicenciamento = compra.VlrLicenciamento;

                    dc.Compras.InsertOnSubmit(compraDB);
                }
                else
                {
                    compraDB.IdCompra = compra.Id;
                    compraDB.IdCorretor = compra.IdCorretor;
                    compraDB.IdFornecedor = compra.IdFornecedor;
                    compraDB.ValorComissaoCorretor = compra.ValorComissao;
                    compraDB.FormaPagtoComissaoCorretor = compra.FormaPagtoComissao;
                    compraDB.DtCompra = compra.DtCompra;
                    compraDB.VlrCompra = compra.VlrCompra;
                    compraDB.VlrEspecie = compra.VlrEspecie;
                    compraDB.VlrCartao = compra.VlrCartao;
                    compraDB.QtdeVezesCartao = compra.QtdeVezesCartao;
                    compraDB.DtPrimParcelaCartao = compra.DtPrimParcelaCartao;
                    compraDB.VlrCheque = compra.VlrCheque;
                    compraDB.VlrTransfBancaria1 = compra.VlrTransfBancaria1;
                    compraDB.VlrTransfBancaria2 = compra.VlrTransfBancaria2;
                    compraDB.SaldoPagar = compra.SaldoPagar;
                    compraDB.SaldoDescontar = compra.SaldoDescontar;
                    compraDB.VlrMultas = compra.VlrMultas;
                    compraDB.ClassificacaoMultas = compra.ClassificacaoMultas;
                    compraDB.Gravame = compra.Gravame;
                    compraDB.BancoGravame = compra.BancoGravame;
                    compraDB.ClassificacaoGravame = compra.ClassificacaoGravame;
                    compraDB.SaldoQuitacao = compra.SaldoQuitacao;
                    compraDB.DtSaldo = compra.DtSaldo;
                    compraDB.LicenciamentoMes = compra.LicenciamentoMes;
                    compraDB.ClassificacaoLicenciamento = compra.ClassificacaoLicenciamento;
                    compraDB.VlrLicenciamento = compra.VlrLicenciamento;
                }

                try
                {
                    dc.SubmitChanges();
                    return compraDB.IdCompra;
                }
                catch (Exception ex)
                {
                    string date = ((DateTime.Now).ToString()).Substring(0, 9);
                    date = date.Replace('/', '-');
                    string location = "\\\\Servidor\\SharedDocs\\Aplicação\\Log";
                    string path = (String.Format("{0}{1}\\Problema Gravação_{2}.txt", @"", location, date));
                    StreamWriter valor = new StreamWriter(path, true, Encoding.ASCII);
                    valor.WriteLine("Erro ao salvar: " + compraDB.IdCompra);
                    valor.WriteLine(ex.Message);
                    valor.WriteLine("------------------------------------------------------");
                    valor.Close();

                    dc.ChangeConflicts.ResolveAll(RefreshMode.OverwriteCurrentValues);
                    dc.SubmitChanges();

                    return -1;
                }
            }
        }

        public static bool Delete(int id)
        {
            using (DM.DataMappingDataContext dc = new DM.DataMappingDataContext())
            {
                DM.Compra compraDB = (from c in dc.Compras
                                      where c.IdCompra == id
                                      select c).FirstOrDefault();

                if (compraDB != null)
                {
                    try
                    {
                        dc.Compras.DeleteOnSubmit(compraDB);
                        dc.SubmitChanges();
                        return true;
                    }
                    catch (Exception ex)
                    {
                        string date = ((DateTime.Now).ToString()).Substring(0, 9);
                        date = date.Replace('/', '-');
                        string location = "\\\\Servidor\\SharedDocs\\Aplicação\\Log";
                        string path = (String.Format("{0}{1}\\Problema Exclusão_{2}.txt", @"", location, date));
                        StreamWriter valor = new StreamWriter(path, true, Encoding.ASCII);
                        valor.WriteLine("Erro ao excluir:" + compraDB.IdCompra);
                        valor.WriteLine(ex.Message);
                        valor.WriteLine("------------------------------------------------------");
                        valor.Close();

                        dc.ChangeConflicts.ResolveAll(RefreshMode.OverwriteCurrentValues);
                        dc.SubmitChanges();

                        return true;
                    }
                }
                else
                    return false;
            }
        }

        #endregion

        #region Metodos Privados

        private static DO.Compra FillRecord(DM.Compra compraDB)
        {
            DO.Compra compra = new DO.Compra();

            compra.Id = compraDB.IdCompra;
            compra.IdCorretor = compraDB.IdCorretor;
            compra.IdFornecedor = compraDB.IdFornecedor;
            compra.ValorComissao = compraDB.ValorComissaoCorretor;
            compra.FormaPagtoComissao = compraDB.FormaPagtoComissaoCorretor;
            compra.DtCompra = compraDB.DtCompra;
            compra.VlrCompra = compraDB.VlrCompra;
            compra.VlrEspecie = compraDB.VlrEspecie;
            compra.VlrCartao = compraDB.VlrCartao;
            compra.QtdeVezesCartao = compraDB.QtdeVezesCartao;
            compra.DtPrimParcelaCartao = compraDB.DtPrimParcelaCartao;
            compra.VlrCheque = compraDB.VlrCheque;
            compra.VlrTransfBancaria1 = compraDB.VlrTransfBancaria1;
            compra.VlrTransfBancaria2 = compraDB.VlrTransfBancaria2;
            compra.SaldoPagar = compraDB.SaldoPagar;
            compra.SaldoDescontar = compraDB.SaldoDescontar;
            compra.VlrMultas = compraDB.VlrMultas;
            compra.ClassificacaoMultas = compraDB.ClassificacaoMultas;
            compra.Gravame = compraDB.Gravame;
            compra.BancoGravame = compraDB.BancoGravame;
            compra.SaldoQuitacao = compraDB.SaldoQuitacao;
            compra.DtSaldo = compraDB.DtSaldo;
            compra.ClassificacaoGravame = compraDB.ClassificacaoGravame;
            compra.LicenciamentoMes = compraDB.LicenciamentoMes;
            compra.ClassificacaoLicenciamento = compraDB.ClassificacaoLicenciamento;
            compra.VlrLicenciamento = compraDB.VlrLicenciamento;

            return compra;

        }

        #endregion
    }
}
